package wht.jly.forum.controller.upload;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import wht.jly.forum.utils.JsonData;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * @author lanyangji
 * @date 2018/10/7 10:58
 */
@RestController
@RequestMapping("/file")
@Slf4j
public class FileUploadController {

    /**
     * 文件上传的根目录（在Spring的application.properties的配置文件中配置）：
     * web.upload-path: D:/
     */
    @Value("${web.upload-path}")
    private String webUploadPath;

    @RequestMapping("/upload")
    public JsonData uploadFile(MultipartFile file) {
        String oriName = "";
        Map<String, String> dataMap = new HashMap<>();
        try {
            String temp = "images/forum_upload/";
            // 获取图片的文件名
            String fileName = file.getOriginalFilename();
            // 获取图片的扩展名
            String extensionName = StringUtils.substringAfterLast(fileName, ".");
            // 先的图片的文件名 = 获取时间戳 + “.”图片扩展名
            String newFileName = System.currentTimeMillis() + "." + extensionName;
            // 文件路径
            String filePath = webUploadPath.concat(temp);

            File dest = new File(filePath, newFileName);
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }

            // 上传到指定的目录
            file.transferTo(dest);

            // 将反斜杠转换为正斜杠
            String data = temp.replaceAll("\\\\", "/") + newFileName;

            // 返回保存结果信息
            dataMap.put("src", "/" + data);
            dataMap.put("title", oriName);

            return JsonData.build(0, oriName + "保存成功！", dataMap);
        } catch (Exception e) {
            return JsonData.build(1, "图片保存失败！", null);
        }
    }

}
